A more detailed description of the tests is at here. |
STEP |
Video enabled ? |
ACTION |
IF ERROR |
COMMENT |
---|---|---|---|---|
1 | No | Send checkpoint 33 | 33h chosen because it is very distinctive. See note 1 below. | |
2 | No | Initialise the MDA/CGA card. | Both MDA and CGA done. If neither card are present, this step will not fail, but step 18 will. | |
3 | No | Send checkpoint 00 | ||
4 | No | For MDA/CGA, set the correct video mode, and make the cursor invisible. | Both MDA and CGA done. If neither card are present, this step will not fail, but step 18 will. | |
5 | No | Send checkpoint 02 | ||
6 | Yes | Clear the MDA/CGA video screen. | Both MDA and CGA done. If neither card are present, this step will not fail, but step 18 will. | |
7 | Yes | Send checkpoint 03 | ||
8 | Yes | On-screen, display the name of the program and the version. | Both MDA and CGA done. If neither card are present, this step will not fail, but step 18 will. | |
9 | Yes | Send checkpoint 04 | ||
10 | Yes | Just in case, disable NMI interrupts. | A good motherboard will automatically do that at power-on time, via hardware. | |
11 | Yes | Send checkpoint 06 | ||
12 | Yes | Initialise the 8255 chip. | Also disables turbo mode for compatible motherboards. | |
13 | Yes | Send checkpoint 08 | ||
14 | Yes | Set up 'unexpected NMI' handler. | See note 2 below. | |
15 | Yes | Send checkpoint 09 | ||
16 | Yes | • Beep the speaker three times: short-long-short. • On the IBM 5150, single-click the relay. |
Short-long-short beeping chosen because it is very distinctive. See note 3 below. |
|
17 | Yes | Send checkpoint 0A | ||
18 | Yes | Look for MDA video RAM. If MDA found, send checkpoint 0B, then display "MDA video RAM present." If MDA not found, look for CGA video RAM. If CGA found, send checkpoint 0C, then display "CGA video RAM present." |
If neither found, send checkpoint 8A (hex) then halt. | Later, if step 20 passes, "MDA video RAM present" or "CGA video RAM present" will get overwritten by the "Testing CPU" of step 27. |
19 | Yes | Send checkpoint 0D | ||
20 | Yes | The last 96 bytes of MDA/CGA video RAM is unused by the card. We will use those bytes for the stack and some variables. Test those 96 bytes. |
If an error, send checkpoint 8D (hex), then display "Test of video RAM failed.", then halt. | |
21 | Yes | Send checkpoint 0E | ||
22 | Yes | Clear our variables. | Zero the variables that the diagnostic stores in video RAM. | |
LOOP START | ||||
23 | Yes | Send checkpoint 10 (hex) | ||
24 | Yes | Disable maskable interrupts, and set the direction flag to increment. | ||
25 | Yes | Display 00 in the top right corner of the screen. | ||
26 | Yes | Send checkpoint 12 (hex) | ||
27 | Yes | Display "Testing CPU" | ||
28 | Yes | Part 1 of CPU test. | If an error, send checkpoint 92 (hex) then halt. | |
29 | Yes | Send checkpoint 14 (hex) | ||
30 | Yes | Part 2 of CPU test. | If an error, send checkpoint 94 (hex) then halt. | |
31 | Yes | Send checkpoint 16 (hex) | ||
32 | Yes | Display "Diagnostic ROM checksum" | ||
33 | Yes | See if 8-bit checksum of ROM is 00h. | If not 00h, send checkpoint 96 (hex) then halt. | |
34 | Yes | Send checkpoint 18 (hex) | ||
35 | Yes | Quote: 'Disable the DMA controller' | ||
Yes | Send checkpoint 19 (hex) | |||
36 | Yes | Quote: 'Disable the speakers and enable timer 2' | ||
37 | Yes | Send checkpoint 1A | ||
37 | Yes | Display "8253 timer channel 0" | ||
39 | Yes | Test 8253 timer channel 0. Mode 2 only. | If an error, send checkpoint 9A (hex). | |
40 | Yes | Send checkpoint 1B | ||
41 | Yes | Display "8253 timer channel 1" | ||
42 | Yes | Test 8253 timer channel 1. Mode 2 only. | If an error, send checkpoint 9B (hex) then halt. | Halt beause with a failing timer 1, there won't be any refresh of motherboard and card RAM. That compromises a later test of that RAM. |
43 | Yes | Send checkpoint 1C | ||
44 | Yes | Display "8253 timer channel 2" | ||
45 | Yes | Test 8253 timer channel 2. Mode 2 only. | If an error, send checkpoint 9C (hex). | |
46 | Yes | Send checkpoint 1F | ||
47 | Yes | Display "8237A DMA controller" | ||
48 | Yes | Test the 8237A DMA controller. | If an error, send checkpoint 9C then halt. | |
48 | Yes | Send checkpoint 22 (hex) | ||
50 | Yes | Configure the 8237 DMA controller | Includes preparing for RAM refresh by appropriately configuring channel 0. | |
51 | Yes | Send checkpoint 24 (hex) | ||
52 | Yes | Display "Hot timer 1 check" | ||
53 | Yes | Look for a 'hot' timer 1' | If error, send checkpoint A5. | The DREQ0 pin on the 8237A DMA controller is expected to be LOW. |
54 | Yes | Send checkpoint 26 (hex) | ||
55 | Yes | Initialise channel 1 on the 8253 timer chip. | One pulse per approximately 15 µs. See here. | |
56 | Yes | Send checkpoint 28 (hex) | ||
57 | Yes | Display "RAM parity error latches" | ||
58 | Yes | Step 1: Clear/disable the two 'RAM parity error' latches. Step 2: Verify that neither of the two latches are showing as set. |
If error, send checkpoint A7. | |
59 | Yes | Send checkpoint 2A | ||
60 | Yes | Display "Check first 2 KB of RAM" | ||
61 | Yes | Check the first 2 KB of RAM. | If an error, send checkpoint AA then put error details on-screen, then halt the CPU. | |
62 | Yes | Send checkpoint 32 (hex) | ||
63 | Yes | Display "Found RAM:" | ||
64 | Yes | See how much Conventional memory can be found. | Strickly speaking, what this diagnostic reports is the top address of RAM. For example, in the misconfiguration shown at here, the diagnostic will report 640 KB. Same if a RAM card goes faulty in a way that creates a gap between motherboard RAM and card RAM. |
|
65 | Yes | Send checkpoint 34 (hex) | ||
66 | Yes | Display the amount of RAM found. | ||
67 | Yes | Send checkpoint 35 (hex) | ||
68 | Yes | Display "Testing RAM - Data" | ||
69 | Yes | Do a data test of the found RAM. | If an error, send checkpoint B5 then put error details on-screen, then halt the CPU. | |
70 | Yes | Send checkpoint 37 (hex) | ||
71 | Yes | Display "Testing RAM - Address" | ||
72 | Yes | Adddress test of the found RAM - Part 1 of 2. | If an error, send checkpoint B7 then put error details on-screen, then halt the CPU. | Tested as how IBM do it; a test done within each 16K block. |
Yes | Adddress test of the found RAM - Part 2 of 2. | If an error, send checkpoint B8 then put error details on-screen, then halt the CPU. | Step 1: At all addresses that are a multiple of 1K, write a unique value into the first address. Step 2: Go and read back all of those unique values. |
|
73 | Yes | Send checkpoint 39 (hex) | ||
74 | Yes | Display "Testing RAM - Refresh" | ||
75 | Yes | Do a test of RAM refresh. | If an error, send checkpoint B9 then put error details on-screen, then halt the CPU. | 90 second delay between test write then read-back. |
76 | Yes | Send checkpoint 3A | ||
77 | Yes | Display "Testing RAM - Slow Refresh" | ||
78 | Yes | Test the RAM at the refresh rate of 2 milliseconds. | If an error, send checkpoint BA then put error details on-screen, then halt the CPU. | |
79 | Yes | Send checkpoint 3E | ||
80 | Yes | Display "8259 interrupt controller" | ||
81 | Yes | Test the 8259 interrupt controller. | If an error, send checkpoint BE. | |
82 | Yes | Send checkpoint 40 (hex) | ||
83 | Yes | Display "Hot IRQ interrupts". | ||
84 | Yes | Check if the 8259 sees an interrupt (IRQ0 to IRQ7) when one is unexpected. | If an interrupt, send checkpoint C0. | |
85 | Yes | Send checkpoint 42 (hex) | ||
86 | Yes | Display "Checking interrupt IRQ0". | ||
87 | Yes | Verify correct operation of Interrupt 0. | If an error, send checkpoint C2. | |
88 | Yes | Send checkpoint 46 (hex) | ||
89 | Yes | Display "Hot NMI". | ||
90 | Yes | Verify that the 8088 CPU is not receiving an NMI. | If an error (NMI present), send checkpoint C6. | |
91 | Yes | Send checkpoint 4E | ||
92 | Yes | Display "Keyboard responds to reset". | ||
93 | Yes | Software reset the keyboard, and see if in response, the keyboard sends the expected byte of AA. | If an error, send checkpoint CE. | |
94 | Yes | Send checkpoint 50 (hex) | ||
95 | Yes | Display "Keyboard stuck key". | ||
96 | Yes | See if the keyboard is reporting a stuck key. | If an error, send checkpoint D0. | |
97 | Yes | Send checkpoint 52 (hex) | ||
98 | Yes | Display "Check floppy controller". | ||
99 | Yes | See if a reset of the floppy controller is successful. | If an error, send checkpoint D2. | |
100 | Yes | Send checkpoint 54 (hex) | ||
101 | Yes | Display "Trying to read a floppy". | ||
101 | Yes | Try to read a track on a 360K floppy. | If an error, send checkpoint D4. | 360K floppy drive required. |
102 | Yes | Send checkpoint 60 (hex) | ||
103 | Yes | Display "Check ROM at F4000". | IBM 5150: IC socket U28. IBM 5160: IC socket U19. Diagram at here. | |
104 | Yes | Verify that 8 KB at F4000 has an 8-bit checksum of 00. (Ignore result if no 8KB ROM at F4000 - may pass, may fail.) |
Ignore result if no 8KB ROM at F4000 - may pass, may fail. | |
105 | Yes | Send checkpoint 61 (hex) | ||
106 | Yes | Display "Check ROM at F6000". | IBM 5150: IC socket U29. IBM 5160: IC socket U19. Diagram at here. | |
107 | Yes | Verify that 8 KB at F6000 has an 8-bit checksum of 00. (Ignore result if no 8KB ROM at F6000 - may pass, may fail.) |
Ignore result if no 8KB ROM at F6000 - may pass, may fail. | |
108 | Yes | Send checkpoint 62 (hex) | ||
109 | Yes | Display "Check ROM at F8000". | IBM 5150: IC socket U30. IBM 5160: IC socket U18. Diagram at here. | |
110 | Yes | Verify that 8 KB at F8000 has an 8-bit checksum of 00. (Ignore result if no 8KB ROM at F8000 - may pass, may fail.) |
Ignore result if no 8KB ROM at F8000 - may pass, may fail. | |
111 | Yes | Send checkpoint 63 (hex) | ||
112 | Yes | Display "Check ROM at FA000". | IBM 5150: IC socket U31. IBM 5160: IC socket U18. Diagram at here. | |
113 | Yes | Verify that 8 KB at FA000 has an 8-bit checksum of 00. (Ignore result if no 8KB ROM at FA000 - may pass, may fail.) |
Ignore result if no 8KB ROM at FA000 - may pass, may fail. | |
114 | Yes | Send checkpoint 64 (hex) | ||
115 | Yes | Display "Check ROM at FC000". | IBM 5150: IC socket U32. IBM 5160: IC socket U18. Diagram at here. | |
116 | Yes | Verify that 8 KB at FC000 has an 8-bit checksum of 00. (Ignore result if no 8KB ROM at FC000 - may pass, may fail.) |
Ignore result if no 8KB ROM at FC000 - may pass, may fail. | |
117 | Yes | Send checkpoint 6A | ||
118 | Yes | Display the switch setting | ||
119 | Yes | Send checkpoint 72 (hex) | ||
120 | Yes | Update the 'Completed passes' figure | ||
121 | Yes | Send checkpoint 74 (hex) |
Note 1 | Possible problems in using 00 instead could be: • 00 might be the default power-on display of some parallel/LPT monitoring devices. • Some parallel/LPT monitoring devices may register a 00 (and other bytes) at power-on time. |
Note 2 | Low RAM is untested at this point, but do it anyway. In fact, there may be no low RAM at all, but do it anyway. If the 'unxepected NMI' handler gets called, checkpoint 99 will be sent, and *** UNEXPECTED NMI *** be displayed on a MDA/CGA screen. |
Note 3 | Yes, we are taking the chance that the circuitry involved in beeping the speaker is working. No beeps might be because: • No speaker connected to motherboard. • Diagnostic ROM not created properly. • Diagnostic ROM has started to execute, but circuitry involved in beeping the speaker is faulty. |